<?php

namespace app\common\job;

use app\common\model\goods\Goods as GoodsGoods;
use app\common\model\order\Goods;
use app\common\model\order\Order as OrderOrder;
use app\common\model\user\Log as UserLog;
use think\Exception;
use think\Log;
use think\queue\Job;

class Dividend
{
    public function fire(Job $job, $order)
    {
        try {
            //TODO
            Log::info('开始发送消息：' . json_encode($order));
            if ($order['status'] != '0') {
                $job->delete();
            }
            //1、给用户发送消息
            $flag = $this->cancelOrder($order);

            if ($flag) {
                //2、发送完成后 删除job
                $job->delete();
            } else {
                //任务轮询4次后删除
                if ($job->attempts() > 3) {
                    // 第1种处理方式：重新发布任务,该任务延迟10秒后再执行
                    //$job->release(10);
                    // 第2种处理方式：原任务的基础上1分钟执行一次并增加尝试次数
                    $job->failed();
                    // 第3种处理方式：删除任务
                    $job->delete();
                }
            }
        } catch (Exception $e) {
            // 队列执行失败
            Log::error('发送消息队列执行失败：' . $e->getMessage() . '---' . json_encode($order));
        }
    }

    // 消息队列执行失败后会自动执行该方法
    public function failed($data)
    {
        Log::error('消息队列达到最大重复执行次数后失败：' . json_encode($data));
    }

    public function cancelOrder($order)
    {
        $res = UserLog::where('id', $order['id'])->where('state', '0')->delete();
        return $res ? true : false;
    }
}
